package com.zixi.ai.llm.entity;

import com.alibaba.fastjson2.JSONObject;
import com.zixi.ai.framework.entity.ExtBaseEntity;
import com.zixi.ai.framework.entity.convert.JSONObjectConverter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;

/**
 * @author wfg
 */
@Getter
@Setter
@Entity
@Table(name = "zx_ai_llm")
@Tag(name = "AiLlmEntity", description = "模型库列表")
public class AiLlmEntity extends ExtBaseEntity {
    /**
     * 标题或名称
     */
    @Schema(name = "标题或名称")
    private String title;

    /**
     * 品牌
     */
    @Schema(name = "品牌")
    private String brand;

    /**
     * ICON
     */
    @Schema(name = "ICON")
    private String icon;

    /**
     * 描述
     */
    @Schema(name = "描述")
    private String description;

    /**
     * 是否支持对话
     */
    @Schema(name = "是否支持对话")
    private Boolean supportChat;

    /**
     * 是否支持方法调用
     */
    @Schema(name = "是否支持方法调用")
    private Boolean supportFunctionCalling;

    /**
     * 是否支持向量化
     */
    @Schema(name = "是否支持向量化")
    private Boolean supportEmbed;

    /**
     * 是否支持重排
     */
    @Schema(name = "是否支持重排")
    private Boolean supportReranker;

    /**
     * 是否支持文字生成图片
     */
    @Schema(name = "是否支持文字生成图片")
    private Boolean supportTextToImage;

    /**
     * 是否支持图片生成图片
     */
    @Schema(name = "是否支持图片生成图片")
    private Boolean supportImageToImage;

    /**
     * 是否支持文字生成语音
     */
    @Schema(name = "是否支持文字生成语音")
    private Boolean supportTextToAudio;

    /**
     * 是否支持语音生成语音
     */
    @Schema(name = "是否支持语音生成语音")
    private Boolean supportAudioToAudio;

    /**
     * 是否支持文字生成视频
     */
    @Schema(name = "是否支持文字生成视频")
    private Boolean supportTextToVideo;

    /**
     * 是否支持图片生成视频
     */
    @Schema(name = "是否支持图片生成视频")
    private Boolean supportImageToVideo;

    /**
     * 大模型请求地址
     */
    @Schema(name = "大模型请求地址")
    private String llmEndpoint;

    /**
     * 大模型名称
     */
    @Schema(name = "大模型名称")
    private String llmModel;

    /**
     * 大模型 API KEY
     */
    @Schema(name = "大模型 API KEY")
    private String llmApiKey;

    /**
     * 大模型其他属性配置
     */
    @Schema(name = "大模型其他属性配置")
    private String llmExtraConfig;

    /**
     * 其他配置内容
     */
    @Convert(converter = JSONObjectConverter.class)
    private JSONObject options;
}
